deploy: Actually copy xattrs of modified config files
authorColin Walters <walters@verbum.org>
Sat, 3 Jan 2015 17:14:11 +0000 (12:14 -0500)
committerColin Walters <walters@verbum.org>
Tue, 6 Jan 2015 15:55:44 +0000 (10:55 -0500)
Regression from 7b01bd2e4333d4346dd08e0b5caf672f56b1ccfd
where we stopped using g_file_copy() - we lost copying xattrs.

This specifically breaks /etc/shadow SELinux labeling, with the
obvious bad consequences.

https://bugzilla.gnome.org/show_bug.cgi?id=742289

src/libostree/ostree-sysroot-deploy.c

index 70e4bd3954a4c79843b03d822c45e3d3305f5225..669604e4a2c3ec93084e342635ea773fbce4a1fd 100644 (file)
@@ -93,6 +93,13 @@ copy_one_file_fsync_at (int              src_parent_dfd,
         }
       out = g_unix_output_stream_new (dest_fd, TRUE);
 
+      if (src_xattrs != NULL)
+        {
+          if (!gs_fd_set_all_xattrs (dest_fd, src_xattrs,
+                                     cancellable, error))
+            goto out;
+        }
+
       if (g_output_stream_splice (out, in, 0, cancellable, error) < 0)
         goto out;
 
@@ -134,6 +141,12 @@ copy_one_file_fsync_at (int              src_parent_dfd,
           gs_set_error_from_errno (error, errno);
           goto out;
         }
+      if (src_xattrs != NULL)
+        {
+          if (!gs_dfd_and_name_set_all_xattrs (dest_parent_dfd, name, src_xattrs,
+                                               cancellable, error))
+            goto out;
+        }
       if (fchownat (dest_parent_dfd, name,
                     stbuf->st_uid, stbuf->st_gid,
                     AT_SYMLINK_NOFOLLOW) != 0)